
//验证form
function validateform($form, errorimgurl, rightimgurl, infoimgurl){
	var validinput = function(){
		var $this = $(this);
		var ret = validateinput($form, $this);
		if(-1==ret.errorcode){
			//$this.next().children("span").text(ret.errordesc);
		}
		else{
			var $tipbox = $this.next().children("span");
			$tipbox.empty();
			$tipbox.text("");
			
			if(0==ret.errorcode){
				$tipbox.prepend("<img src='"+rightimgurl+"'/>");
			}
			else if(1==ret.errorcode){
				$tipbox.text(ret.errordesc);
				$tipbox.prepend("<img src='"+errorimgurl+"'/>");
			}
			else if(2==ret.errorcode){
				$tipbox.text(ret.errordesc);
				$tipbox.prepend("<img src='"+infoimgurl+"'/>");
			}
		}
	};
	
	var $inputs = $(":input[vtype],:input[required]", $form);
	$inputs.focus(validinput);
	$inputs.blur(validinput);
	//$inputs.change(validinput);
	//$inputs.keyup(validinput);
	
	//$(":submit", $form).click(function(event){
	$form.submit(function(event){
		var $submit = $(this);
		var haserror = false;
		
		$inputs.each(function(){
			$this = $(this);
			var errorcode = $this.data("errorcode");
			if(null==errorcode || ""==errorcode){
				$this.focus();
				errorcode = $this.data("errorcode");
			}
			if(errorcode===1){
				haserror = true;
				$(this).focus();
				return false;
			}
		});
		if( haserror){
			event.stopPropagation();
			event.stopImmediatePropagation();
			event.preventDefault();
		}
		return !haserror;
	});
}

/*errorcode:
 * 0: 没有错误; 1: 有错误; 2:仅提示; -1:没有约束
 */
function validateinput($form, $input) {
	
	// 获取控件值, 如果是单选多选组, 则获取组的值
	var value = $input.val();
	var type = $input.attr("type");
	if("checkbox"==type || "radio"==type){
		var name = $input.attr("name");
		var $form = $input.parents("form").get(0);
		value = $(":input[name="+name+"]:checked", $form).val();
	}
	
	// 获取验证属性
	var vtype = $input.attr("vtype");
	var required = ($input.attr("required"));
	required = (null!=required && false!=required);
	
	var errorcode = 0;// 错误代码. 1: 有错误; 0: 没有错误; 2:仅提示
	var errormsg = "";//错误信息
	
	if(!required && (null==vtype || ""==vtype)){//如果不是required,且没有设置vtype,那么不进行验证
		errorcode=-1;
	}
	else{
		//#region 必填验证前的内容验证, 此部分一般是需要进行格式提醒的内容验证方式
		var isvalidformat = false;
		if("number"==vtype){
			isvalidformat = !isNaN(value);
			errormsg += " 格式: 数字, 如123";
		}
		else if("date"==vtype){
			var datereg = /^\d{4}\-\d{1,2}\-\d{1,2}$/g;
			isvalidformat = datereg.test(value);
			errormsg += " 格式: 日期, 如1987-08-26";
		}
		else if("phone"==vtype){
			if(!isNaN(value)){
				if(value.length==11){
					isvalidformat= true;
				}
			}
			errormsg += " 格式: 电话(手机)号码, 如18611407039, 01012345678";
		}
		else if("email"==vtype){
			isvalidformat = /(\w|\.)+@\w+\.\w+/g.test(value);
			errormsg += " 格式: 电子邮箱, 如tianj@gmail.com";
		}
		else{// string
			isvalidformat = true;
		}
		
		if(!isvalidformat && required)//如果是必填项且格式不正确, 那么返回错误
			errorcode = 1;
		else if(isvalidformat && required)//如果是必填项且格式正确, 那么返回正确
			errorcode = 0;
		else if(!isvalidformat && !required ){//如果非必填项且格式不正确, 那么返回提示
			if(null!=value && ""!=value)
				errorcode = 2;
			else
				errorcode = 3;
		}
		//#endreg 必填验证前的内容验证
		
		//必填验证
		if(required && (null==value || ""==value)){
			errorcode=1;
			errormsg = " 不能为空. "+errormsg;
		}
		else{
			//#region 必填验证后的内容验证, 此部分一般是无须进行格式提醒的内容验证方式
			isvalidformat = false;
			if("captcha"==vtype){//验证码
				if(null!=value && ""!=value){
					var url = $input.attr("captchaurl");
					url = url.replace("[value]", value);
					$.ajax({
						 type: "GET"
						,async: false
						,url: url
						,dataType: "json"
						,success: function(data){
							if(data===0){
								isvalidformat = true;
							}
							else if(data===-1){
								isvalidformat = false;
								errormsg += " 验证码不正确";
							}
							else if(data===1){
								isvalidformat = false;
								errormsg += " 超时,请刷新验证码";
							}
						}
						,error:function (XMLHttpRequest, textStatus, errorThrown) {
							alert("textstatus:"+textStatus+",\nerrorThrown:"+errorThrown);
						}
					});
				}
			}
			
			if(!isvalidformat && required)//如果是必填项且格式不正确, 那么返回错误
				errorcode = 1;
			else if(isvalidformat && required)//如果是必填项且格式正确, 那么返回正确
				errorcode = 0;
			else if(!isvalidformat && !required ){//如果非必填项且格式不正确, 那么返回提示
				if(null!=value && ""!=value)
					errorcode = 2;
				else
					errorcode = 3;
			}
			//#endreg 必填验证后的内容验证
		}
	}
	$input.data("errorcode", errorcode);
	$input.data("errordesc", errormsg);
	
	return {"errorcode":errorcode, "errordesc":errormsg};
}